using System.Collections.Generic;
using Commons.Models.OperationsContext;
using Commons.Models.TradeValues;

namespace Commons.Services.TradeValues
{
	public abstract class TradeValueProcessor : ITradeValueProcessor
	{
		public virtual IEnumerable<ITradeValue> PreProcessCost(ITradeValue value, IOperationContext context)
		{
			yield return value;
		}

		public virtual IEnumerable<ITradeValue> PreProcessReward(ITradeValue value, IOperationContext context)
		{
			yield return value;
		}

		public abstract IEnumerable<CostStatus> GetCostsStatus(ITradeValue value, IOperationContext context, int quantity);

		public abstract IEnumerable<ITradeValue> ProcessCost(ITradeValue value, IOperationContext context, int quantity);

		public abstract IEnumerable<ITradeValue> ProcessReward(ITradeValue value, IOperationContext context, int quantity);
	}
}
